package com.reflect;

import org.junit.Test;

import java.lang.reflect.Method;

/**
 * 反射获取方法对象,以及方法的触发执行
 */

public class MethodDemo1 {
    /**
     * 1.获取类中的全部成员方法
     */
    @Test
    public void getDeclaredMethods(){
        //a.获取类对象
        Class c=Student.class;

        //提取类中全部方法对象
        Method[] methods = c.getDeclaredMethods();
        for (Method method : methods) {
            System.out.println("方法名："+method.getName()+"    方法的返回值类型："+method.getReturnType());
        }

    }

    @Test
    /**
     * 2.获取类中的某个方法：根据方法名称和参数来定位
     */
    public void getDecaredMethod() throws Exception {
        Class c=Student.class;
        //获取方法中的某个方法(根据方法名和参数)

        Method study = c.getDeclaredMethod("study", String.class, int.class);

        //方法的触发
        study.setAccessible(true);

        //创建Student对象，因为方法在Student对象里面
        Student student=new Student();
        //执行方法
        //
        study.invoke(student,"lingyi",18);




    }}
